package br.com.insight.consultoria.integracao.dao;

import java.util.List;

import org.springframework.dao.DataAccessException;

import br.com.insight.consultoria.entity.Usuario;
import br.com.insight.consultoria.entity.Vaga;
import br.com.insight.consultoria.erro.exception.InsightConstants;
import br.com.insight.consultoria.erro.exception.InsightDaoException;
import br.com.insight.consultoria.erro.exception.InsightException;
import br.com.insight.consultoria.erro.exception.SistemaException;
import br.com.insight.consultoria.integracao.dao.genericdao.GenericDAO;
import br.com.insight.consultoria.integracao.dao.interfacedao.VagaDAO;

public class VagaImpDAO extends GenericDAO implements VagaDAO{
	
	@Override
	public void inserir(Vaga vaga) throws InsightException {
		
		try{
		
			saveOrUpdateEntity(vaga);
		
		}catch(DataAccessException sql){
			
			throw new InsightDaoException(InsightConstants.MENSAGEM_ERRO_ACESSO_BANCO,sql);
		
		}catch(Exception ex){
			
			throw new SistemaException(InsightConstants.MENSAGEM_ERRO_NAO_TRATADO,ex);
			
		}
		
	}
	
	@Override
	public void alterar(Vaga vaga) throws InsightException {

		try{
		
			saveOrUpdateEntity(vaga);
			
		}catch(DataAccessException sql){
			
			throw new InsightDaoException(InsightConstants.MENSAGEM_ERRO_ACESSO_BANCO,sql);
		
		}catch(Exception ex){
			
			throw new SistemaException(InsightConstants.MENSAGEM_ERRO_NAO_TRATADO,ex);
			
		}
			
	}
	
	@Override
	public void excluir(Vaga vaga) throws InsightException {
		
		try{
		
			deleteEntity(vaga);
			
		}catch(DataAccessException sql){
			
			throw new InsightDaoException(InsightConstants.MENSAGEM_ERRO_ACESSO_BANCO,sql);
		
		}catch(Exception ex){
			
			throw new SistemaException(InsightConstants.MENSAGEM_ERRO_NAO_TRATADO,ex);
			
		}
		
	}
	
	@Override
	public Vaga getVaga(Long id) throws InsightException {
		
		Vaga  vaga=null;
		
		try{
		
			vaga=(Vaga)getEntityById(Vaga.class, id);
			
		}catch(DataAccessException sql){
			
			throw new InsightDaoException(InsightConstants.MENSAGEM_ERRO_ACESSO_BANCO,sql);
		
		}catch(Exception ex){
			
			throw new SistemaException(InsightConstants.MENSAGEM_ERRO_NAO_TRATADO,ex);
			
		}
			
		return vaga;
	}
	
	@Override
	public List<Vaga> pesquisar(Usuario usuario) throws InsightException {
		
		List<Vaga> listaVagas=null;
		
		try{
			
			listaVagas=findFiltered(Vaga.class,"usuario", usuario);
			
		}catch(DataAccessException sql){
			
			throw new InsightDaoException(InsightConstants.MENSAGEM_ERRO_ACESSO_BANCO,sql);
		
		}catch(Exception ex){
			
			throw new SistemaException(InsightConstants.MENSAGEM_ERRO_NAO_TRATADO,ex);
			
		}
			
		return listaVagas;
	}
	
	@Override
	public List<Vaga> listaVagas() throws InsightException {
		
		List<Vaga> listaVagas=null;
		
		try{
		
			listaVagas=findAll(Vaga.class);
			
		}catch(DataAccessException sql){
			
			throw new InsightDaoException(InsightConstants.MENSAGEM_ERRO_ACESSO_BANCO,sql);
		
		}catch(Exception ex){
			
			throw new SistemaException(InsightConstants.MENSAGEM_ERRO_NAO_TRATADO,ex);
			
		}
			
		return listaVagas;
	}

}
